package com.freemypay.test.并发.共享受限资源.在其他对象上同步;

/**
 * 两个任务可以同时进入同一个对象，该对象上的方法是在不同的锁上同步的
 * @author yesixian
 * @date 2018年6月7日
 */
public class SyncObject {
	public static void main(String[] args) {
		final DualSynch dualSynch = new DualSynch();
		new Thread() {
			public void run() {
				dualSynch.f();
			};
		}.start();
		dualSynch.g();
	}

}

class DualSynch {
	private Object syncObject = new Object();
	
	/**
	 * 对方法同步，在this同步
	 */
	public synchronized void f() {
		for (int i = 0; i < 5; i++) {
			System.out.println("f()");
			Thread.yield();
		}
	}
	
	/**
	 * 对syncObject同步，同步块
	 * 和上面的相互独立
	 */
	public void g() {
		synchronized (syncObject) {
			for (int i = 0; i < 5; i++) {
				System.out.println("g()");
				Thread.yield();
			}
		}
	}
	
}
